package com.eltsistemas.controller.salarial;

import java.text.ParseException;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.eltsistemas.adapter.Calendario;
import com.eltsistemas.dao.GenericDao;
import com.eltsistemas.hibernate.HibernateUtil;
import com.eltsistemas.modelo.Salarial;
import com.eltsistemas.modelo.Funcao;
import com.eltsistemas.modelo.Funcionario;
import com.eltsistemas.modelo.Setor;

@Controller
@RequestMapping(value="/salarial")
public class SalarialAltera {
	
	@RequestMapping(value="/alterado", method=RequestMethod.POST)
	public String alterado(Salarial salarial, String dtAlteracao, Double salarioNovo, 
						   Long idSetor1, Long idFuncao1 , String nomeFuncionario2
						   ) throws ParseException
	{
		try
		{
			String motivo = salarial.getMotivo();
		
			//Iniciando conexao e abrindo uma transacao
			Session session = new HibernateUtil().getSession();
			session.beginTransaction();
			
			GenericDao<Setor> daoSetor = new GenericDao<>(session, Setor.class);
			GenericDao<Funcao> daoFuncao = new GenericDao<>(session, Funcao.class);
			GenericDao<Funcionario> daoFuncionario = new GenericDao<>(session, Funcionario.class);
			
			//Carregando os objetos na session
			Setor setor = daoSetor.findById(idSetor1);
			Funcao funcao = daoFuncao.findById(idFuncao1);
			Funcionario funcionario= daoFuncionario.findByName(nomeFuncionario2);
			salarial = (Salarial) session.load(Salarial.class, salarial.getId());
			
			//Atualizando os dados do objeto
			salarial.setFuncionario(funcionario);
			salarial.setDataAlteracao( new Calendario().getData(dtAlteracao) );
			salarial.setSalarioAtual(salarioNovo);
			salarial.setFuncao(funcao);
			salarial.setSetor(setor);
			salarial.setMotivo(motivo);
				
			GenericDao<Salarial> daoSalarial = new GenericDao<>(session, Salarial.class);
			
			/*Salvando objeto no session, comitando os dados no banco e
			 * finalizando a conexao
			*/
			session = daoSalarial.altera(salarial);	
			session.beginTransaction().commit();
			session.close();
	
			return "redirect:lista?nomeFuncionario="+nomeFuncionario2;	
		}
		
		catch(HibernateException e)
		{
			return "redirect:/painel/erro";
		}
	}

}
